package db

import (
	"errors"
	"gorm.io/gorm"
	"hr/api/dto"
)

type DictValue struct {
	AppModel
	Tag     string `gorm:"size:64" json:"tag"`
	Name     string `gorm:"size:64" json:"name"`
	Sort     string `gorm:"size:64" json:"sort"`
	CreateBy string `gorm:"size:128" json:"createBy"` // 创建人
	UpdateBy string `gorm:"size:128" json:"updateBy"` // 更新人
	Remark   string `gorm:"size:255" json:"remark"`   //备注
	
	DictId uint `json:"dict_id"`
}

func (m *DictValue) TableName() string {
	return "dict_value"
}

// GetDictValueByParams 根据条件查找
func GetDictValueByParams(p map[string]interface{}) (DictValue, error, string) {
	f := DictValue{}
	err := GetInstance().Where(p).First(&f).Error
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return f, errors.New("查无记录"), "0"
		}
		return f, errors.New(err.Error()), "1"
	}
	return f, nil, "2"
}

func GetDictValue(id uint) ([]DictValue, error) {
	d := make([]DictValue, 0)
	err := GetInstance().Where("dict_id = ?", id).Order("sort asc").Find(&d).Error
	if err != nil {
		return nil, err
	}
	return d, nil
}

func CreateDictValue(p dto.DictValueRequest, user string, dictId uint) (DictValue, error) {
	d := DictValue{
		Tag:      p.Tag,
		Name:     p.Name,
		Sort:     p.Sort,
		CreateBy: user,
		Remark:   p.Remark,
		DictId:   dictId,
	}
	if err := GetInstance().Create(&d).Error;err !=nil {
		return d,errors.New("创建失败")
	}
	return d,nil
}

func UpdateDictValue(id uint,p dto.DictValueRequest, userId string) (DictValue,error) {
	f := DictValue{
		AppModel: AppModel{
			ID:        id,
		},
	}
	err := GetInstance().Model(&f).Updates(DictValue{
		Tag:      p.Tag,
		Name:     p.Name,
		Sort:     p.Sort,
		Remark:   p.Remark,
		UpdateBy: userId,
		DictId:   0,
	}).Scan(&f).Error
	if err != nil {
		return f,err
	}
	return f,nil
}

func DeleteDictValue(id uint) (DictValue,error) {
	f := DictValue{}
	err := GetInstance().Unscoped().Where("id = ?", id).Delete(&f).Error
	if err != nil {
		return f, err
	}
	return f, nil
}
